跳到主要内容

脚本输入(Script Inputs)

脚本输入(Script Inputs)是脚本与 Rive 编辑器之间的桥梁,使你可以通过自定义输入字段来配置并控制脚本行为。

通过定义输入,你可以暴露数字、颜色、布尔值、画板组件等可配置属性,这些属性会直接显示在 Rive UI 中。这样你可以复用同一脚本逻辑,并在不同实例中使用不同配置。

定义输入(Define Inputs)

要创建脚本输入,请在类型中声明,并在返回函数中提供默认值。

-- Define the script's data and inputs.
-- These properties will be available in `self`
type MyNode = {
myNumber: Input<number>,
myColor: Input<Color>,
-- This input expects a View Model named Points
myViewModel: Input<Data.Points>,
-- This input expects an Artboard with a View Model named Points
myArtboard: Input<Artboard<Data.Points>>,
-- This will be accessible via self, but not in the inputs panel
myString: string,
}

function init(self: SnakeGame): boolean
print("myString", self.myString)
print("myNumber", self.myNumber)
print("myColor", self.myColor)
print("myViewModel value", self.myViewModel.someString.value)
print("myViewModel value", self.myArtboard.data.someEnum.value)

return true
end

return function(): Node<MyNode>
return {
init = init,
draw = draw,
myString = "Rive for president!"
-- Sets default value when creating a new instance of the script
-- This will be overridden by a value set in the script's inputs
myNumber = 0,
myColor = Color.rgba(255, 255, 0, 255), -- 0xFFFFFF00

-- Use late() to mark this input as assigned at runtime
myViewModel = late(),
myArtboard = late()
}
end

设置输入值(Set Input Values)

在层级面板(Hierarchy)中选择 节点(Node)布局脚本(Layout Scripts) 的组件,或在数据面板选择 转换器脚本(Converter Scripts),即可在右侧侧栏配置输入。

Node script input

数据绑定输入(Data Binding Inputs)

你可以使用数据绑定(Data Binding)在运行时驱动输入值。

说明(Note) 输入可以控制脚本,但脚本不能反向修改输入值。

如果你需要从脚本控制视图模型属性,请通过上下文(Context)或视图模型输入(View Model Inputs)访问视图模型。

在右侧边栏中对输入字段右键,选择 Data Binding 并绑定属性。

Data bind a converter input

监听输入变化(Listen for Input Changes)

当任意输入变化时,update 会触发:

function update(self: MyNode)
print('An update changed')
end

也可以监听单个属性:

function handleMyStringChanged()
print('myString changed!')
end

function handleMyNumberChanged(myNumber: number)
print('myNumber changed!', myNumber)
end

function init(self: MyApp): boolean
-- handleMyStringChanged fires when self.myString changes
local myString = self.myString
myString:addListener(handleMyStringChanged)

-- Pass a parameter to the handleMyStringChanged callback
local myNumber = self.myNumber
myNumber:addListener(myNumber.value, handleMyNumberChanged)

return true
end

视图模型输入(View Model Inputs)

视图模型输入让脚本可读写视图模型属性,这些属性可通过数据绑定驱动场景任意元素。

说明(Note) 在脚本中访问视图模型最简单的方式通常是通过上下文(Context)。

设置视图模型

示例中:

  • Main 视图模型有 character 属性
  • character 本身是 Character 视图模型
  • Character 内有两个数字属性(x、y)供脚本控制

Nested

定义视图模型输入

在脚本中声明与目标嵌套视图模型匹配的输入类型:Data.<ViewModelName>

type MyNode = {
-- This input expects a view model instance of type Character
character: Input<Data.Character>
}

return function(): Node<MyNode>
return {
init = init,
advance = advance,
draw = draw,
-- Initialize with `late()` so the value
-- can be provided by the editor at runtime.
character = late(),
}
end

在编辑器连接输入

  1. 在场景中选中脚本(或转换器)
  2. 在右侧边栏找到属性分组
  3. character 输入选择绑定目标
  4. 从 Main 视图模型中选择嵌套 character

Nested

读取与写入视图模型属性

function moveCharacter(self: MyNode)
print('Current x: ', self.character.x.value)
self.character.x.value = 10
end

因为 character 是视图模型实例,你可直接访问其公共属性:

self.character.<propertyName>.value